﻿using System;

namespace CS_Discovery
{
/// <summary>
/// 树状列表节点对象
/// </summary>
/// <remarks>
/// 本对象表示高性能ASP.NET树状列表中的一个节点,每个节点
/// 有个Nodes属性用于保存子节点，由此可以形成树状结构。
/// </remarks>
[System.Serializable()]
[System.Xml.Serialization.XmlType("Node")]
public class SkyTreeNode
{
    /// <summary>
    /// 初始化对象
    /// </summary>
    public SkyTreeNode()
    {
        myNodes = new SkyTreeNodeList(this);
    }

    private string strID = null;
    /// <summary>
    /// 节点编号
    /// </summary>
    /// <remarks>
    /// 在生成HTML代码时，系统会调用XSLT的函数 generate-id() 来生成节点HTML
    /// 编号，在同一个XML文档时，自动生成的编号是唯一的不会重复。但当页面上有
    /// 多个树状列表或者需要客户端动态加载节点时则会在不同的XML文档上调用
    /// generate-id() 函数，这会导致节点的HTML编号重复，此时需要明确的设置该ID
    /// 属性以确保生成的节点的HTML编号不重复。一般可以设置为 
    /// System.GUID.NewGUID().ToString() 值
    /// </remarks>
    public string ID
    {
        get 
        {
            return strID; 
        }
        set 
        {
            strID = value; 
        }
    }

    private string strText = null;
    /// <summary>
    /// 节点文本
    /// </summary>
    public string Text
    {
        get 
        {
            return strText; 
        }
        set
        {
            strText = value; 
        }
    }

    private string strIcon = null;
    /// <summary>
    /// 节点图标URL地址
    /// </summary>
    public string Icon
    {
        get 
        {
            return strIcon; 
        }
        set
        {
            strIcon = value; 
        }
    }

    private string strLink = null;
    /// <summary>
    /// 节点链接地址
    /// </summary>
    public string Link
    {
        get
        {
            return strLink; 
        }
        set
        {
            strLink = value; 
        }
    }

    private string strValue = null;
    /// <summary>
    /// 节点数值
    /// </summary>
    public string Value
    {
        get
        { 
            return strValue;
        }
        set
        {
            strValue = value;
        }
    }

    private string strOnClick = null;
    /// <summary>
    /// 节点点击事件处理代码
    /// </summary>
    public string OnClick
    {
        get
        {
            return strOnClick; 
        }
        set
        { 
            strOnClick = value; 
        }
    }

    private string strXMLSource = null;
    /// <summary>
    /// 子节点信息XML来源
    /// </summary>
    /// <remarks>
    /// 当客户端要动态的加载节点的子节点，则必须要设置该属性为一个
    /// 相对或绝对的URL地址，该地址必须使用一个页面参数来传递该节点的
    /// ID属性。
    /// </remarks>
    public string XMLSource
    {
        get 
        { 
            return strXMLSource;
        }
        set
        {
            strXMLSource = value;
        }
    }
    //
    //		private string strStyleClass = null;
    //		public string StyleClass
    //		{
    //			get{ return strStyleClass ;}
    //			set{ strStyleClass = value;}
    //		}

    private SkyTreeNode myParent = null;
    /// <summary>
    /// 父节点对象
    /// </summary>
    /// <remarks>
    /// Parent属性不能参与XML序列化和反序列化，否则会出现树状节点
    /// 循环引用而导致程序结构错误，因此使用 XmlIgnore 特性来说明
    /// 不参与XML序列化和反序列化。
    /// </remarks>
    [System.Xml.Serialization.XmlIgnore()]
    [System.ComponentModel.Browsable(false)]
    public SkyTreeNode Parent
    {
        get
        {
            return myParent; 
        }
        set
        {
            myParent = value; 
        }
    }

    private SkyTreeNodeList myNodes = null;
    /// <summary>
    /// 子节点列表
    /// </summary>
    /// <remarks>
    /// 此处使用XmlArrayItem特性说明Nodes属性是一个列表，该列表对应
    /// 的XML节点下Node名称的子XML节点对应一个SkyTreeNode类型的对象。
    /// </remarks>
    [System.Xml.Serialization.XmlArrayItem("Node", typeof(SkyTreeNode))]
    public SkyTreeNodeList Nodes
    {
        get
        {
            return myNodes; 
        }
    }

}//public class SkyTreeNode
}
